#include <iostream>
#include <vector>

int solve_stairs(int n)
{
	int arr[100000] = { 0 };
	arr[0] = 0;
	arr[1] = 1;
	arr[2] = 2;
	arr[3] = 4;

	for (int i = 4; i <= n; i++)
	{
		arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3];
	}
	return arr[n];
}

// 第一吐槽点，为什么使用递归解决这个，找个其他案例不好吗
int school_method(int s,int i)
{
	int take[99];
	int num = 0;
	
	// 这个der方法，我真的感谢它，递归在有些时候确实是一个报名手段
	for (int j = 3; j > 0; j--)
	{
		if (i < j)
		{
			// ???
			// 第二吐槽点，什么也不做你写代码干什么
		}
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(nullptr);

	int n;
	std::cin >> n;

	std::cout << solve_stairs(n) << std::endl;
	return 0;
}